package eval.hostEvaluate;

import java.util.List;
import java.util.Map;
import eval.host.Host;
import eval.vm.VirtualMachine;

/**
 * This class is used to chose the best host for a deployment of the given VM.
 * it gives the host a score base on the estimated unsatisfied
 *  demand after deploying the VM to this host.
 * 
 * @author Amit Peled   <amit.kapina@gmail.com>
 * @author Igal Kaufman <igal.kaufman@gmail.com>  
 */
public interface IHostEvaluate {

	/**
	 * 
	 * Evaluate the host for deploy on him vmToBeDeployed.
	 *  
	 * @param host the host to evaluate 
	 * @param vmToBeDeployed list of VMs 
	 * @param vmsAlreadyInHost VMs on the host
	 * @param cpuDemandOfVMs CPU demand of VMs
	 * @param memDemandOfVMs MEM demand of VMs
	 * @return the score of the host
	 */
	public int evaluationForHost(Host host,VirtualMachine vmToBeDeployed,
			List<VirtualMachine> vmsAlreadyInHost,Map<VirtualMachine, Integer> cpuDemandOfVMs,
			Map<VirtualMachine, Integer> memDemandOfVMs);

}
